查看原文
其他

慢雾 | 公链安全审计方案全面升级,打造更加安全的主网

慢雾安全团队 慢雾科技 2022-05-28

背景


自 2009 年人类历史上第一个公链系统——比特币上线以来,据行情平台不完全记录,已经有三千多个公链项目诞生并且有过交易记录。


如今,整个公链的市值已经接近 1 万亿美元,而区块链安全却是这个庞大市场上悬挂着的达摩克利斯之剑,人们在享受资本狂欢的同时,却无时不在担心无处不在的黑客攻击。据慢雾 Hacked 档案库(hacked.slowmist.io)统计,由各种安全事件导致的损失已达数百亿美元。


2022 年 3 月 29 日,Ronin 跨链桥遭到黑客攻击,17.36 万个 ETH 和 2550 万 USDC 被盗,累计价值约 6.2 亿美元。这也是 DeFi 历史上损失金额最高的被盗事件,Ronin 发布报告表示,攻击者控制了九个验证节点私钥中的五个。人们不禁想问,如何能避免如此严重的安全事件,是否有可能通过安全审计去减少甚至避免此类安全问题?


通过分析 Ronin 攻击事件我们发现,主网被黑客攻陷,已经不是单纯的节点软件源代码漏洞所造成的,而是主网遭遇了传统黑客渗透攻击。慢雾早在创业之初就已经在尝试对公链主网进行安全审计,经过多年的实战和安全研究,我们积累了大量的经验和深厚的漏洞挖掘技术,我们向全行业公开我们的主网安全审计方法,希望能共同打造一个更加安全的区块链生态。


公链的发展现状


早期的公链,以山寨币为主,如狗狗币、点点币,大多诞生在 2013 年前后,以比特币作为主要竞争目标,试图创造一个比比特币更优的加密货币。


在 2017 年以太坊生态爆发以后,诞生了大量以以太坊为主要竞争目标的公链,例如 EOS、Solana、Fantom,它们提供更特别的共识机制、更好的智能合约编程平台和更高的交易性能。


然而由于新公链特性复杂,开发人员较少,用户较少,于是不少项目转而使用更加成熟的以太坊解决方案,例如 Polygon、BNB Chain、Ronin,开发者大量利用了以太坊的技术堆栈,使得区块链生态得以快速启动。以太坊二层网络也是当下十分热门的扩容解决方案,通过将零知识证明或欺诈证明技术,将计算外包到链下,大幅度提高交易性能,如 zkSync、Arbitrum、Optimism、StarkWare。


从山寨币到新公链,再到如今的以太坊侧链、二层架构,热点一直在改变,技术一直在进步。对于与公链利益息息相关的用户来说,层出不穷的公链,如何去评估它的安全性呢?


公链安全审计,审的是什么?


尽管没有一个系统可以做到绝对安全,但可以设计和构建适度安全的系统。实际上,如果一个安全系统符合一组特定的安全标准,则可以说它具有一定的信任级别。因此,可将信任构建到系统中,然后进行评估、认证和认可。


安全没有止境,对于公链来说更是如此。一个公链项目,动辄几十万行代码,对每一行源代码进行全量安全审计,看似合理,但所需要付出的时间和成本却是巨量的,对于一个快速发展迭代的行业来说是缺乏可行性的。


没有一层不变的方案,只有不断满足的需求。对于审计来说更是如此,我们需要关注行业的发展动向,了解当前区块链生态中突出存在的安全问题是什么,用户的安全需求是什么,以此为依据来制定安全审计方案,只有这样才能将审计成本控制在一个合理的范围内,同时满足用户的安全需求。


慢雾安全团队结合实际情况,制定了多种公链安全审计方案:


方案一:主网安全审计


从 P2P 网络、RPC 交互、共识账本、加密算法、账号及交易结构等层面排查审计目标是否存在已知的公链安全漏洞,采用“黑盒+灰盒”的策略,以最接近真实攻击的方式对项目进行完整的安全测试。我们关注的漏洞包括:


  • P2P 层:

    女巫攻击

    日食攻击

    窃听攻击

    拒绝服务攻击

    BGP 劫持攻击

    异形攻击

    区块时间劫持

  • RPC 层:

    窃听攻击

    拒绝服务攻击

    以太坊黑色情人节漏洞

    Http 输入攻击

    跨域钓鱼攻击

  • 共识层:

    长程攻击

    贿赂攻击

    种族攻击

    拒绝产块攻击

    抗审查制度

    芬尼攻击

    Vector76 攻击

    替代历史攻击

    51% 攻击

    磨块攻击

    币龄累积攻击

    自私挖矿

    区块双产攻击

  • 加密:

    密码攻击

    私钥预测

    长度扩展攻击

  • 交易:

    交易重放攻击

    交易延展性攻击

    时间锁定交易攻击

    假充值攻击

    权限后门攻击


(漏洞详情可参考:https://github.com/slowmist/Cryptocurrency-Security-Audit-Guide/blob/main/Blockchain-Common-Vulnerability-List.md)


举个例子:日食攻击,通常是由于节点的 P2P 通信被恶意节点完全占据,导致无法连接到正常的对等节点,这时我们可通过审查源代码里 P2P 相关模块,查看节点的最大连接数、单机允许的最大连接数等参数,是否在一个合理的范围,如果处于一个易受攻击的范围那就存在较大的风险,比如未限制单个 IP 的连接数,导致一个恶意主机可对任意节点发起日食攻击。


这种审计方法的特点是审计时长可控,可快速发现问题,避免项目出现常见的漏洞,我们推荐多数项目进行一轮全面的主网安全审计。


方案二:交易所上币审计


方案审计方法与主网安全审计相同,不同的是审计条目更精简,主要关注账号和交易安全,包含的条目有:


  • 私钥预测

  • 后门攻击

  • 不安全的加密库

  • 交易延展性攻击

  • 交易重放攻击

  • 假充值攻击

  • RPC 盗窃


这种审计方案的特点是审计时长最短,成本较低,适合基于成熟项目二次开发的公链,例如基于 bitcoin-core/go-ethereum/bitshares/EOSIO 等。


方案三:源代码安全审计


源代码审计可以是全量代码,也可以是部分模块。

慢雾团队采用“白盒”策略对目标代码的安全测试,常用的方法有:


1. 静态源代码分析(SAST)

慢雾团队使用开源或商业代码扫描器检查代码质量,我们支持所有流行语言,例如 C/C++/Golang/Rust/Java/Nodejs/C#


2. 手动代码审查

慢雾团队手动逐行检查代码,寻找常见的编码缺陷,例如:


  • 状态一致性

  • 失败回滚

  • 数值溢出

  • 参数验证

  • 错误句柄

  • 边界检查

  • 单元测试覆盖率


方案四:社区定制审计方案


我们根据一些公链的特点,定制了安全审计方案,例如波卡(Polkadot)和 Cosmos。


以波卡为例,波卡生态项目使用 Substrate 作为开发框架,开发者可以不用关注底层网络及账本等的实现方式,专注于业务逻辑的实现,我们根据这种情况,舍弃掉了公链审计项目中关于网络层、共识层、密码学等底层模块,增加了一些更加细致的审计条目,如下所示:


  • 重放攻击

  • 重排攻击

  • 条件竞争攻击

  • 权限控制攻击

  • 区块数据依赖攻击

  • 函数状态变量的显式可见性

  • 算术精度误差

  • 恶意 Event 事件审计

  • 状态一致性审计

  • 失败回滚审计

  • 单元测试审计

  • 数值溢出审计

  • 参数校验审计

  • 错误捕获审计

  • 边界检查审计


完整的审计方案已在 https://github.com/slowmist/Cryptocurrency-Security-Audit-Guide 开源。


结语


在过去的几年时间内,已有近百个知名公链项目通过慢雾的不同类型公链安全审计,例如:PlatON、BHD、Acala、Eden、Metis 等,通过在审计过程中的互动,开发团队更加系统地认识到公链安全体系的构建方法,增强了主网的安全性和健壮性,提高用户对项目的认可。


慢雾建议各大项目定期为主网做一次安全审计,一方面能让投资者更放心,另一方面能更好地避免不必要的损失,为生态蓬勃发展添一份力。


往期回顾

慢雾出品 | MistTrack 反洗钱追踪系统

链上追踪:洗币手法科普之波场 TRON

慢雾:Rikkei Finance 被黑复现分析

慢雾:揭露浏览器恶意书签如何盗取你的 Discord Token

慢雾出品 | 余弦:区块链黑暗森林自救手册

慢雾导航


慢雾科技官网

https://www.slowmist.com/


慢雾区官网

https://slowmist.io/


慢雾 GitHub

https://github.com/slowmist


Telegram

https://t.me/slowmistteam


Twitter

https://twitter.com/@slowmist_team


Medium

https://medium.com/@slowmist


知识星球

https://t.zsxq.com/Q3zNvvF


您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存